home *** CD-ROM | disk | FTP | other *** search
/ Aminet 34 / Aminet 34 (2000)(Schatztruhe)[!][Dec 1999].iso / Aminet / util / mouse / FreeMouse.lha / FreeMouse / ClickFront.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-01  |  1.6 KB  |  84 lines

  1.  
  2. #include <exec/types.h>
  3.  
  4. #include <intuition/intuitionbase.h>
  5. #include <intuition/intuition.h>
  6. #include <intuition/screens.h>
  7. #include <graphics/clip.h>
  8. #include <devices/inputevent.h>
  9.  
  10. #include <clib/intuition_protos.h>
  11. #include <clib/layers_protos.h>
  12.  
  13. #include "ClickFront.h"
  14.  
  15. extern struct IntuitionBase *IntuitionBase;
  16.  
  17.  
  18. void HandleClickToFront(struct InputEvent *ie)
  19. {
  20.   static struct Window *win=0,*lastwin=0;
  21.   static long secs=0,microsecs=0,count=0;
  22.  
  23.   win=WindowUnderPointer();
  24.   if(InWindowBorder(win))
  25.   {
  26.     if((count==1) && (win==lastwin) && (DoubleClick(secs,microsecs,ie->ie_TimeStamp.tv_secs,ie->ie_TimeStamp.tv_micro)))
  27.     {
  28.       WindowToFront(win);
  29.       count=0;
  30.     }
  31.     else
  32.     {
  33.       count=1; lastwin=win;
  34.       secs=ie->ie_TimeStamp.tv_secs;
  35.       microsecs=ie->ie_TimeStamp.tv_micro;
  36.     }
  37.   }
  38. }
  39.  
  40.  
  41. struct Window *WindowUnderPointer()
  42. {
  43.   int x,y;
  44.   unsigned long lock;
  45.   struct Window *win=NULL;
  46.   struct Screen *scr;
  47.   struct Layer *layer;
  48.  
  49.   scr=IntuitionBase->FirstScreen;
  50.   do
  51.   {
  52.     x=scr->MouseX; y=scr->MouseY;
  53.     if((x<0) || (y<0))
  54.       scr=scr->NextScreen;
  55.   } while((scr!=NULL) && ((x<0)||(y<0)));
  56.  
  57.   if(!scr)
  58.     return(NULL);
  59.  
  60.   layer=WhichLayer(&scr->LayerInfo,x,y);
  61.   if(layer)
  62.     win=layer->Window;
  63.   return(win);
  64. }
  65.  
  66.  
  67. BOOL InWindowBorder(struct Window *win)
  68. {
  69.   int x,y;
  70.   if(!win)
  71.     return(FALSE);
  72.   x=win->MouseX; y=win->MouseY;
  73.   if(x<win->BorderLeft)
  74.     return(TRUE);
  75.   if(y<win->BorderTop)
  76.     return(TRUE);
  77.   if(x>(win->Width-win->BorderRight-1))
  78.     return(TRUE);
  79.   if(y>(win->Height-win->BorderBottom-1))
  80.     return(TRUE);
  81.   return(FALSE);
  82. }
  83.  
  84.